SQSのメトリクスから標準キューが空であることを確認してみた
データアナリティクス事業本部の鈴木です。
SQSの標準キューが空かどうか確かめたいことがありました。 キューが空かどうかは、ほとんどの場合はロングポーリングを使用して判断するので十分そうですが、下記のデベロッパーガイドにより厳密に確認する方法の記載があったので試してみました。
準備
検証に使用する標準キューを作成しておきます。 CloudFormationのテンプレートを作成したので、それを使ってキューを作成しました。
標準キューの名前はcm-nayuts-sample-sqs
などとしておきました。
AWSTemplateFormatVersion: 2010-09-09 Description: SQS Standard Queue Parameters: QueueName: Description: Name for queue Type: String Resources: Queue: Type: AWS::SQS::Queue Properties: QueueName: !Sub ${QueueName}
やってみる
1. コンソールから確認する
SQSのコンソールから作成したキューを開きます。モニタリングタブからモニタリング間隔の設定を行います。
今回はデベロッパーガイドに従い、1分間隔の自動更新にしました。
このうち、以下の項目を確認する必要があります。
- 表示されたメッセージのおよその数
- 表示されないメッセージのおよその数
- 遅延メッセージのおよその数
※デベロッパーガイドと少し訳が異なっていたので、適宜読み替えました。
メッセージを送受信
画面から、メッセージを2件送信後、しばらくおいてメッセージを削除し、表示の変化を確認してみました。
表示されたメッセージのおよその数
が2件に上がった後、削除すると0件に下がってそのままであることが確認できました。特に遅延メッセージを入れたりメッセージを不可視の状態にはしなかったので、ほかの2つは0件のままです。表示されたメッセージのおよその数
が0件になった後、3つのモニタリング項目が数分間0件のままなので、この標準キューは空であると言えます。
2. AWS CLIやSDKから確認する
AWS CLIから確認することも可能です。この場合、数分の間、一定の間隔で属性のメトリックを確認します。今回はある時点でのメトリックの取得方法をみてみます。
以下の3つの属性のメトリックを確認します。
- ApproximateNumberOfMessagesVisible
- ApproximateNumberOfMessagesNotVisible
- ApproximateNumberOfMessagesDelayed
結果が分かりやすいよう、メトリックを取得する前に、キューに2件メッセージを入れておきました。
まずAWS CLIのget-queue-attributes
コマンドでメトリックを取得します。
aws sqs get-queue-attributes --queue-url https://sqs.ap-northeast-1.amazonaws.com/123456789012/cm-nayuts-sample-sqs \ --attribute-names ApproximateNumberOfMessages ApproximateNumberOfMessagesNotVisible ApproximateNumberOfMessagesDelayed # { # "Attributes": { # "ApproximateNumberOfMessages": "2", # "ApproximateNumberOfMessagesNotVisible": "0", # "ApproximateNumberOfMessagesDelayed": "0" # } # }
また、Python SDKからは以下のようになります。
import boto3 client = boto3.client("sqs") sqs_url = "https://sqs.ap-northeast-1.amazonaws.com/123456789012/cm-nayuts-sample-sqs" response = client.get_queue_attributes( QueueUrl=sqs_url, AttributeNames=["ApproximateNumberOfMessages", "ApproximateNumberOfMessagesNotVisible", "ApproximateNumberOfMessagesDelayed"]) print(response["Attributes"])
python get_queue_attributes.py # {'ApproximateNumberOfMessages': '2', # 'ApproximateNumberOfMessagesNotVisible': '0', # 'ApproximateNumberOfMessagesDelayed': '0'}
3. CloudWatchメトリクスから確認する
CloudWatchメトリクスからも先ほど確認したメトリックを見ることができます。こちらも複数のデータ点で、連続して値が0件であることを確認する必要があります。
CloudWatchメトリクスのすべてのメトリクス
> SQS
> キューメトリクス
で、作成したキューのメトリクスを確認します。
確認が必要な3つのメトリックを選択し、グラフ上で複数の0件が連続して記録されていることを確認します。
最後に
今回はデベロッパーガイドに記載のある3つの方法で、SQSの標準キューが空か確認してみました。
標準キューはSQSの分散アーキテクチャからおおよその結果を使ってキューの状態を確認することになるため、いくつかの属性のメトリックを連続した時間点で確認する工夫が必要になりました。参考になりましたら幸いです。